﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations;
using CapaDeDominio;

namespace CapaDeDatos.EF.ORM
{
    public class ReservaMapping : EntityTypeConfiguration<Reserva>
    {
        public ReservaMapping()
            : base()
        {
            ToTable("reserva");
            HasKey(s => s.Codigo);
            Property(s => s.Codigo)
                .HasColumnName("codigo")
                .IsRequired()
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
            HasRequired(s => s.Cliente)
                .WithMany()
                .Map(s => s.MapKey("codigo_cliente"));
            HasRequired(s => s.Sala)
                .WithMany()
                .Map(s => s.MapKey("codigo_sala"));
            Property(s => s.Fecha_inicio)
                .HasColumnName("fecha_inicio")
                .IsRequired();
            Property(s => s.Hora_inicio)
                .HasColumnName("hora_inicio")
                .IsRequired();
            Property(s => s.Tiempo)
                .HasColumnName("tiempo")
                .IsRequired();
            Property(s => s.Estado)
                .HasColumnName("estado")
                .IsRequired();
            HasMany<Instrumento>(s => s.InstrumentosAdicionales)
            .WithMany(s => s.Reservas)
            .Map(m =>
            {
                m.ToTable("detalle_reserva_instrumento");
                m.MapLeftKey("codigo_reserva");
                m.MapRightKey("codigo_instrumento");
            });
            HasMany<Servicio>(s => s.ServiciosAdicionales)
           .WithMany(i => i.Reservas)
           .Map(m =>
           {
               m.ToTable("detalle_reserva_servicio");
               m.MapLeftKey("codigo_reserva");
               m.MapRightKey("codigo_servicio");
           });
           
        }
    }
}